#ifndef __THREAD_POOL__
#define __THREAD_POOL__
#include "my_header.h"
#include "taskQueue.h"
// 定义100MB为大文件
#define BIGFILE 100000000

// 定义线程池
typedef struct threadPool_s
{
    // 所有子线程id
    pthread_t *threadIds;
    // 子线程的数量
    int threadNum;
    // 任务队列
    taskQueue_t taskQueue;
    // 退出标记
    // int exitFlag;
} threadPool_t;

// 网络传输数据的结构
typedef struct train_s
{
    int len;
    char data[1024];
} train_t;

// 已连接的客户端信息
typedef struct client_info_s
{
    int netfd;
    char virtual_global_path[1024];
    char global_path[1024];
} client_info_t;

// 初始化线程池
int initThreadPool(threadPool_t *pthreadPool, int threadNum); // initThreadPool.c
// 定义线程的入口函数
void *threadFunc(void *arg); // worker.c
// 初始化tcp连接
int initTcpSocket(int *socket_fd, char *ip, char *port); // initTcpSocket.c
// 添加描述符fd到epoll监听集合
int epollAddFD(int epoll_fd, int fd); // epoll.c
// 从epoll监听集合中删除描述符fd
int epollDelFD(int epoll_fd, int fd); // epoll.c
// 验证用户身份
int passwd_verify(const char *username, const char *password); // verify.c

// 接受并处理客户端指令
int handle(client_info_t *client_info); // handle.c
// 处理cd命令，即更新路径名
int cd_work(client_info_t *client_info); // cdWork.c
// 处理ls命令，即展示当前目录下所有文件
int ls_work(const client_info_t *client_info); // lsWork.c
// 处理pwd命令，即传输虚拟path
int pwd_work(const client_info_t *client_info); // pwdWork.c
// 处理remove命令，即删除文件
int remove_work(client_info_t *client_info); // removeWork.c
// 处理gets命令，即发送文件
int gets_work(const client_info_t *client_info); // getsWork.c
// 处理puts命令，即接收文件
int puts_work(const client_info_t *client_info); // putsWork.c
#endif